// import commonjs from 'vite-plugin-commonjs'
import dayjs from 'dayjs'
import postcssPresetEnv from 'postcss-preset-env'
import UnoCSS from 'unocss/vite'

import path from 'path'
// import nodePolyfills from 'vite-plugin-node-stdlib-browser'

// 获取当前时间戳
const buildTime = dayjs().format('YYYY-MM-DD HH:ss:mm')

/** @type {import('vite').UserConfig} */
const common = {
  define: {
    'import.meta.env.VITE_BUILDTIME': `"${buildTime}"`,
  },
  root: process.cwd(),
  base: './',
  resolve: {
    alias: {
      '@/api': path.resolve(__dirname, '..', './src/api'),
      '@/components': path.resolve(__dirname, '..', './src/components'),
      '@/models': path.resolve(__dirname, '..', './src/models'),
      '@/pages': path.resolve(__dirname, '..', './src/pages'),
      '@/router': path.resolve(__dirname, '..', './src/router'),
      '@/utils': path.resolve(__dirname, '..', './src/utils'),
    },
    extensions: ['.js', '.jsx'], // 导入没有带后缀的文件
  },
  plugins: [
    UnoCSS(),
    /** 允许commonjs方式【module.exports】导出和引用 */
    // commonjs(),
    // 将node内置对象【Buffer,global，process】添加到浏览器
    // nodePolyfills(),
  ],
  css: {
    modules: {
      /** 样式模块化，即支持【import styles from "./App.less"; <div className={styles.bg}>aaa</div>】的方式 */
      scopeBehaviour: 'local',
      /** 配置该项，输出的类名是按规则的，目的：让热更新后的名字还是一样 */
      generateScopedName: '[name]__[local]___[hash:base64:5]',
      // localsConvention: "camelCaseOnly", // 修改生成的配置对象的key的展示形式(驼峰还是中划线形式)
      // generateScopedName: (name, filename, css) => {
      //     // name -> 代表的是你此刻css文件中的类名
      //     // filename -> 是你当前css文件的绝对路径
      //     // css -> 给的就是你当前样式
      //     // 配置成函数以后, 返回值就决定了他最终显示的类型
      //     return `${name}_${Math.random().toString(36).substr(3, 8) }`;
      // }
      // hashPrefix: "hello", // 生成hash会根据你的类名   一些其他的字符串(文件名   他内部随机生成一个字符串)去进行生成, 如果你想要你生成hash更加的独特一点, 你可以配置hashPrefix, 你配置的这个字符串会参与到最终的hash生成, （hash: 只要你的字符串有一个字不一样, 那么生成的hash就完全不一样, 但是只要你的字符串完全一样, 生成的hash就会一样）
      // globalModulePaths: ["./componentB.module.css"], // 代表你不想参与到css模块化的路径
    },
    preprocessorOptions: {
      less: {
        // https://lesscss.org/usage/#less-options
        /** parens-division：less4.0+，always：less3.0+ */
        math: 'always',
        /** 允许 import方式引入less */
        javascriptEnabled: true,
        // additionalData: '@import "~@src/themes/index.less";', // 添加全局样式
      },
    },
    postcss: {
      plugins: [
        /**
         * 自动添加浏览器前缀 user-select => -webkit-user-select 等等
         * https://www.jb51.net/article/254335.htm
         */
        postcssPresetEnv(),
      ],
    },
  },
}

export default common
